package com.demo.jzoffer2;

import org.junit.Test;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author gy
 * @date 2022/11/15
 */
public class Test0103_02 {

    /**
     * 在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。
     *
     * 输入：s = "abaccdeff"
     * 输出：'b'
     *
     * 输入：s = ""
     * 输出：' '
     *
     * @param s
     * @return
     */
    public char firstUniqChar(String s) {
        // 可以使用 LinkedHashMap 在put元素的时候就是有顺序的，在第二次遍历的时候直接按顺序取就可以了
        HashMap<Character, Boolean> map = new LinkedHashMap<>();
        char[] sc = s.toCharArray();
        for (char c : sc) {
            // 根据value的真假来判断
            // 第一次添加为 true，之后若还存在重复的key，则赋值false
            map.put(c, !map.containsKey(c));
        }
        // 直接遍历 排序好的 集合
        for (Map.Entry<Character, Boolean> entry : map.entrySet()) {
            if (entry.getValue()){
                return entry.getKey();
            }
        }
        return ' ';
    }


    @Test
    public void m1() {

    }

    @Test
    public void m2(){

    }

}
